package com.titaniume.java;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 *@program: JavaSenior
 *@description:
 * 集合元素的遍历操作 使用迭代器dIterator接口
 * 1.内部的方法：hasNext() next()
 * 2.集合对象每次调用iterator()方法都得到一个全新迭代器对象 默认游标都在集合的第一个元素之前
 * 3.内部定义了remove() ，可以在遍历时候删除结合的元素，此方法不同于ujiehe直接直接调用remove()
 *@author: renfei.huang
 *@create: 2021-10-11 14:15
 */
public class IteratorTest {


    @Test
    public  void test1(){
        Collection collection = new ArrayList();
        collection.add("aaaa");
        collection.add(123);
        collection.add(456);
        collection.add( new Person("jerry", 20) );
        collection.add(new String("tom") );
        collection.add(true);

//
        Iterator iterator = collection.iterator();
//        System.out.println(iterator.next());

        //一般不会用这种写法 不推荐
//        for (int i = 0; i <collection.size() ; i++) {
//            System.out.println(iterator.next());
//        }

        //推荐
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

    @Test
    public  void test2(){
        Collection collection = new ArrayList();
        collection.add("aaaa");
        collection.add(123);
        collection.add(456);
        collection.add( new Person("jerry", 20) );
        collection.add(new String("tom") );
        collection.add(true);
        Iterator iterator = collection.iterator();

        //错误方式一： //NoSuchElementException
//        while (iterator.next()!=null){
//            System.out.println(iterator.next());
//        }

        //错误方式二：
//        while (collection.iterator().hasNext()){
//            System.out.println(collection.iterator().next());
//        }
    }




    //测试Iteator中的remove()
    //如果还未调用next()或在上一次调用 next 方法之后已经调用了 remove 方法，
    //再调用remove都会报IllegalStateException。
    @Test
    public void  test3(){
        Collection collection = new ArrayList();
        collection.add("aaaa");
        collection.add(123);
        collection.add(456);
        collection.add( new Person("jerry", 20) );
        collection.add(new String("tom") );
        collection.add(true);
        Iterator iterator = collection.iterator();

        //删除集合中的"tom"
        while (iterator.hasNext()){
            //java.lang.IllegalStateException 还没next() 不能remove
//            iterator.remove();
            Object obj = iterator.next();
            if("tom".equals(obj)){
                iterator.remove();

//                iterator.remove();
            }
        }


        //遍历集合
        iterator = collection.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }




}
